package app.controllers;

import java.util.List;

import app.models.Endereco;
import app.repositories.EnderecoRepository;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;

@Resource
public class EnderecoController {

	private final Result result;
	private final EnderecoRepository repository;
	private final Validator validator;
	
	
	public EnderecoController(Result result, EnderecoRepository repository, 
	Validator validator) {
		
		this.result = result;
		this.repository = repository;
		this.validator = validator;
	}
	
	@Get("/enderecos")
	public List<Endereco> index() {
		return repository.findAll();
	}
	
	@Post("/enderecos")
	public void create(Endereco endereco) {
		validator.validate(endereco);
		validator.onErrorUsePageOf(this).form();
		repository.create(endereco);
		result.redirectTo(this).index();
	}
	
	@Get("/enderecos/new")
	public Endereco form() {
		return new Endereco();
	}
	
	@Put("/enderecos")
	public void update(Endereco endereco) {
		validator.validate(endereco);
		validator.onErrorUsePageOf(this).form(endereco);
		repository.update(endereco);
		
		this.result.redirectTo(this).index();
	}
	
	@Get("/enderecos/{endereco.id}/edit")
	public Endereco form(Endereco endereco) {
		return repository.find(endereco.getId());
	}

	@Get("/enderecos/{endereco.id}")
	public Endereco show(Endereco endereco) {
		return repository.find(endereco.getId());
	}

	@Get("/enderecos/{endereco.id}/delete")
	public void delete(Endereco endereco) {
		repository.delete(repository.find(endereco.getId()));
		
		this.result.redirectTo(this).index();  
	}
}